/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package it.lapomuge.db.dao;

import it.lapomuge.db.entity.Atleta;
import it.lapomuge.db.entity.Gara;
import it.lapomuge.db.entity.Giudice;
import it.lapomuge.db.entity.Manche;
import it.lapomuge.db.entity.Partecipazione;
import it.lapomuge.db.entity.Voto;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.Query;

/**
 * 
 * @author Muge
 */
public class DbManagerGare extends DbManager {

	private DbManagerGare() {
	}

	public static DbManagerGare getInstance() {
		return new DbManagerGare();
	}

	

	public Voto getVotoFromGiudicePartecipazione(Partecipazione partecipazione, Giudice g) {
		
		return null;
	}

	public void salva(List<Atleta> atleta) {
		for (Atleta a : atleta) {
			Atleta atle = getAtleta(a);
			if (atle == null) {
				this.save(Atleta.class, a);
			}
		}

	}

	public Atleta getAtleta(Atleta atleta) {
		EntityManager em = this.getEntityManager();

		Query q = em.createQuery("select c from Atleta c where c.nome = :nome and c.cognome = :cognome and c.societa = :societa").setParameter("nome", atleta.getNome())
				.setParameter("societa", atleta.getSocieta()).setParameter("cognome", atleta.getCognome());
		try {

			return (Atleta) q.getSingleResult();
		} catch (NoResultException ex) {
			return null;
		}
	}
	
	

	public List<Partecipazione> getPartecipazione(Manche manche) {
		if(manche.getId() == null){
			return new ArrayList<Partecipazione>();
		}
		EntityManager em = this.getEntityManager();
		
		Query q = em.createQuery("select c from Partecipazione c where c.manche = :manche ")
				.setParameter("manche", manche);
		try {
			
			return q.getResultList();
			
		} catch (NoResultException ex) {
			return new ArrayList<Partecipazione>();
		}
	}
	public Manche[] getManches(Gara gara) {
		
		
		EntityManager em = this.getEntityManager();

		Query q = em.createQuery("select c from Manche c where c.gara = :gara ").setParameter("gara", gara);
		try {

			List<Manche> list = q.getResultList();
			return (Manche[]) list.toArray(new Manche[list.size()]);
		} catch (NoResultException ex) {
			return new Manche[0];
		}
	}

	public void salvaGiudici(List<Giudice> list) {
		for (Giudice a : list) {
			Giudice giudice = this.getGiudice(a);
			if(giudice != null){
				a.setId(giudice.getId());
			}
		}
		
		DbManager.getInstance().save(Giudice.class,(Giudice[]) list.toArray(new Giudice[list.size()]));
	}

	private Giudice getGiudice(Giudice a) {
		EntityManager em = this.getEntityManager();

		Query q = em.createQuery("select c from Giudice c where c.nome = :nome and c.cognome = :cognome").setParameter("nome", a.getNome()).setParameter("cognome", a.getCognome());
		try {

			return (Giudice) q.getSingleResult();
		} catch (NoResultException ex) {
			return null;
		}finally{
			em.close();
		}
	}


}
